package com.solution.admin.auth.dao;

import java.util.List;
import java.util.Map;

import com.solution.admin.auth.entity.UserEntity;
import com.solution.common.dao.BaseDao;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;

/**
 * 用户管理DAO接口
 * 
 * @author diwankang
 * @date 2017年4月12日 下午2:47:15
 */
public interface UserDao extends BaseDao<UserEntity> {
	
	/**
	 * 通过用户编码获取客户信息
	 * @param params
	 * @return
	 * @author: solin
	 * @date: 2017年10月31日 上午11:03:27
	 */
	public UserEntity getUserByCode(String userCode);

	/**
	 * 根据用户名查询用户信息
	 * 
	 * @param params
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午2:47:25
	 * @modify <scy> <2017年4月12日 下午2:47:25>
	 */
	public UserEntity getUserByName(Map<String, Object> params);
	
	/**
	 * 根据手机号码查询用户信息
	 * @param params
	 * @return
	 * @author chenl
	 * @date 2017年5月9日 上午9:22:03
	 */
	public UserEntity getUserInfor(Map<String, Object> params);
	/**
	 * 用用户信息表的唯一性验证封装类
	 * @param checkDealerId 经销商ID
	 * @param checkField 验证字段
	 * @param checkValue 验证字段的值
	 * @param checkUserId 用户编号
	 * @return
	 */
	public int checkUserUnique(Map<String, Object> params);

	/**
	 * 保存用户信息
	 * 
	 * @param userEntity
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午2:47:32
	 * @modify <scy> <2017年4月12日 下午2:47:32>
	 */
	public long saveUser(UserEntity userEntity);

	/**
	 * 分页查询用户信息
	 * 
	 * @param pageParam
	 *            分页对象
	 * @param user
	 *            分页参数
	 * @return PageBean 分页参数及数据
	 * @exception 无
	 * @author llp
	 * @date 2017年4月12日 下午2:47:41
	 */
	public PageBean listUser(PageParam pageParam, Map<String, Object> param);

	/**
	 * 更新用户
	 * 
	 * @param userEntity
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午2:47:48
	 * @modify <scy> <2017年4月12日 下午2:47:48>
	 */
	int modifyUser(UserEntity userEntity);

	/**
	 * 批量插入用户与角色关联信息
	 * 
	 * @param userRoleList
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月14日 下午2:13:27
	 * @modify <scy> <2017年4月14日 下午2:13:27>
	 */
	int addUserRole(List<Map<String, Object>> userRoleList);

	/**
	 * 重置用户密码
	 * 
	 * @param user
	 *            用户实体
	 * @return Long 更新是否成功，>1代表更新成功
	 * @author llp
	 * @date 2017年4月12日 下午2:44:59
	 */
	public int updateUserPwd(UserEntity user);
	
	/**
	 * 根据手机 重置用户密码
	 * @param user
	 * @return
	 * @author chenl
	 * @date 2017年5月9日 上午8:59:20
	 */
	public int updateUserPwdByMobile(UserEntity user);

	/**
	 * 删除用户角色
	 * 
	 * @param userId
	 * @return
	 * @author llp
	 * @date 2017年4月12日 下午2:44:59
	 */
	public int deleteUserRole(Long userId);

	/**
	 * 插入用户角色
	 * 
	 * @param roleList
	 * @return
	 * @author llp
	 * @date 2017年4月12日 下午2:44:59
	 */
	public int insertUserRole(Long userId,List<Long> roleIds);
	
	/**
	 * 更新用户状态
	 * @param userId
	 * @param status
	 * @return
	 */
	public int updateStatus(Long userId,Integer status);
		
	/**
	 * 根据经销商编码获取经销商大区及公司的名称、编码
	 * @param dealerCodes
	 * @return
	 * @author xkl
	 * @date 2017年7月31日 下午3:04:56
	 */
	Map<String, Map<String, Object>> listCodeMapByCodes(List<String> dealerCodes);
	/**
	 * 根据用户类型获取用户信息
	 * @param param
	 * @return
	 * @author chenling
	 * @date 2017年8月1日 下午2:53:45
	 */
	List<UserEntity> getUserList( Map<String, Object> param);
	
	/**
	 * 获取业务员列表数据
	 * @param params
	 * @return
	 * @author: solin
	 * @date: 2017年10月20日 下午3:57:56
	 */
	public List<UserEntity> getSalesmanList(Map<String, Object> param);

	/**
	 * 查询业务员列表
	 * @param paramMap
	 * @return
	 */
	public List<UserEntity> listSalesmanForSelector(Map<String, Object> paramMap);

	/**
	 * 逻辑删除用户
	 * @param id
	 * @return
	 */
	public int logicDeleteUser(long id);
}
